#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>

#define High 20
#define Width 30

int moveDirection;
int canvas[High][Width]={0};

  void gotoxy(int x,int y)
{
	HANDLE handle =GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X=x;
	pos.Y=y;
	SetConsoleCursorPosition(handle,pos);
}

void moveSnakeByDirection()
{
	int i,j;
    for(i=0;i<High-1;i++)
	  for(j=0;j<Width-1;j++)
	  if(canvas[i][j]>0)
		canvas[i][j]++;
		
		int oldTail_i,oldTail_j,oldHead_i,oldHead_j;
		int max=0;
	
	for(i=0;i<High-1;i++)
	  for(j=0;j<Width-1;j++)
	if(canvas[i][j]>0)
	{
		if(max<canvas[i][j])
		{
			max=canvas[i][j];
			oldTail_i=i;
			oldTail_j=j;
		}
		if(canvas[i][j]==2)
		{
		oldHead_i=i;
		oldHead_j=j;
		}
	 }
	 canvas[oldTail_i][oldTail_j]=0;
	 if(moveDirection==1)
	 canvas[oldHead_i-1][oldHead_j]=1;
	 if(moveDirection==2)
	 canvas[oldHead_i+1][oldTail_j]=1;
	 if(moveDirection==3)
	 canvas[oldTail_i][oldHead_j-1]=1;
	 if(moveDirection==4)
	 canvas[oldTail_i][oldHead_j+1]=1;
}

void startup()
{   
   
	int i,j;
	for(i=0;i<High;i++)
    {
    	canvas[i][0]=-1;
    	canvas[i][Width-1]=-1;
    	
	}
	for(j=0;j<Width;j++)
	{
	canvas[0][j]=-1;
	canvas[High-1][j]=-1;	
	}
	
	canvas[High/2][Width/2]=1;
	for(i=1;i<=4;i++)
	canvas[High/2][Width/2-1]=i+1;
     moveDirection=4;
 }  
 
void show()
{   
    gotoxy(0,0);
	int i,j;
	for(i=0;i<High;i++)
	{
		for(j=0;j<Width;j++)
		{
			if(canvas[i][j]==0)
			printf(" ");
			else if(canvas[i][j]==-1)
			printf("#");
			else if(canvas[i][j]==1)
			printf("@");
			else if(canvas[i][j]>1)
			printf("*");
		}
		printf("\n");
	}
	Sleep(100);
 }  
   
   void updatewithoutInput()
 {   
  moveSnakeByDirection();
 }
 
void updatewithInput()
 {
 
 }
int main()
 {
 	startup();
 	while(1)
	 {
 		show();
 		void updatewithoutInput();
 		void updatewithInput();
	 }
	 return 0;
 }
